package cn.tedu.csmall.product.service.impl;

import cn.tedu.csmall.product.ex.ServiceException;
import cn.tedu.csmall.product.mapper.AttributeMApper;
import cn.tedu.csmall.product.mapper.AttributeTemplateMapper;
import cn.tedu.csmall.product.mapper.CategoryAttributeTemplateMapper;
import cn.tedu.csmall.product.pojo.dto.AttributeTemplateAndNewDTO;
import cn.tedu.csmall.product.pojo.entity.AttributeTemplate;
import cn.tedu.csmall.product.pojo.vo.AttributeListitemVO;
import cn.tedu.csmall.product.pojo.vo.AttributeStandardVO;
import cn.tedu.csmall.product.pojo.vo.AttributeTemplateListitemVO;
import cn.tedu.csmall.product.pojo.vo.AttributeTemplateStandardVO;
import cn.tedu.csmall.product.service.IAttributeTempService;
import cn.tedu.csmall.product.web.JsonResult;
import cn.tedu.csmall.product.web.ServiceCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

@Slf4j
@Service
public class AttributeTempServiceImpl implements IAttributeTempService,ServiceCode {
    @Autowired
    AttributeTemplateMapper attributeTemplateMapper;
    @Autowired
    AttributeMApper attributeMApper;
    @Autowired
    CategoryAttributeTemplateMapper categoryAttributeTemplateMapper;
    public AttributeTempServiceImpl() {
       log.debug("创建业务类: AttributeTempServiceImpl");
    }
    @Override
    public void addNew(AttributeTemplateAndNewDTO attributeTemplateAndNewDTO) {
        log.debug("开始处理添加塑性模本功能参数：{}",attributeTemplateAndNewDTO);
        int template = attributeTemplateMapper.countAttributeTemplate(attributeTemplateAndNewDTO.getName());
        if (template>1){
            throw new ServiceException(ServiceCode.ERR_CONFLICT,"添加属性模板失败该数据失败");
        }
        LocalDateTime now=LocalDateTime.now();
        AttributeTemplate attributeTemplate=new AttributeTemplate();
        BeanUtils.copyProperties(attributeTemplateAndNewDTO,attributeTemplate);
        attributeTemplate.setGemCreate(now);
        attributeTemplate.setGemModified(now);
        int row=attributeTemplateMapper.insert(attributeTemplate);
        if (row!=1){
            String message="添加数据失败！服务器忙，请稍后再一次尝试!";
            log.debug(message);
            throw new ServiceException(ServiceCode.ERR_INSERT,message);
        }
    }

    @Override
    public void delete(Long id) {
        log.debug("开始处理删除功能!参数{}",id);
        AttributeTemplateStandardVO byId = attributeTemplateMapper.getById(id);
        log.debug("删除数据名称为id:{},参数:{}",id,byId);
        if (byId==null){
            String message="删除数据失败！该数据不存在!";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND,message);
        }
        int count = attributeMApper.countByTemplateId(id);
        if (count>0){
         throw new ServiceException(ServiceCode.ERR_DELETE,
                 "删除数据错“属性”数据关联到此模板，则不允许删除");
        }
        int countAttribute = categoryAttributeTemplateMapper.countAttribute(id);
        if (countAttribute>1){
            throw new ServiceException(ServiceCode.ERR_DELETE,"此属性模板关联了类别，不允许删除");
        }
        int row = attributeTemplateMapper.deleteById(id);
        if (row!=1){
            String message="删除数据失败！服务器忙，请稍后再一次尝试!";
            log.debug(message);
            throw new ServiceException(ServiceCode.ERR_DELETE,message);
        }
    }
    @Override
    public AttributeTemplateStandardVO getAttributeTemplate(Long id) {
        log.debug("开始处理数据");
        AttributeTemplateStandardVO attributeTemplateMapperById = attributeTemplateMapper.getById(id);
        if (attributeTemplateMapperById==null){
            String message="删除数据失败！该数据不存在!";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND,message);
        }

        return attributeTemplateMapperById;
    }
    @Override
    public List<AttributeTemplateListitemVO> listAttributeTemplate() {
        log.debug("开始处理数据");
        List<AttributeTemplateListitemVO> attributeTemplateMapperById= attributeTemplateMapper.listAttribute();
        if (attributeTemplateMapperById==null){
            String message="该数据不存在!";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND,message);
        }
        return attributeTemplateMapperById;
    }
}
